حافظه نهان نقش کلیدی در کامپیوترها دارد. در واقع، تمام سیستمهای رایانهای مدرن، از جمله رایانههای شخصی رومیزی، سرورها در مراکز داده شرکتها، و منابع محاسباتی مبتنی بر ابر، دارای مقادیر کمی از حافظه دسترسی تصادفی استاتیک (SRAM) بسیار سریع هستند که بسیار نزدیک به واحد پردازش مرکزی (CPU) قرار دارند. این حافظه به حافظه کش معروف است.حافظه نهان با وجود اندازه کوچک آن در مقایسه با حافظه اولیه (RAM) یا حافظه ثانویه (منابع ذخیره سازی)، تأثیر زیادی بر عملکرد کلی سیستم دارد.
حافظه کش چیست؟
سیستمهای کامپیوتری دارای درایوهای دیسک سخت یا درایوهای حالت جامد (SSD) برای ارائه ظرفیت بالا و ذخیرهسازی طولانیمدت دادهها و همچنین RAM هستند که برای ذخیره دادهها و کد برنامهای که واحد پردازش مرکزی از آن استفاده میکند یا در شرف نیاز است استفاده میشود. آینده بسیار نزدیک RAM بسیار سریعتر از هارد دیسک یا حافظه SSD است. معمولاً از حافظه دسترسی تصادفی پویا (DRAM) ساخته می شود که به ازای هر گیگابایت یا داده ذخیره شده نیز گران تر است.
اما یک CPU بسیار سریعتر از RAM کار می کند، بنابراین گاهی اوقات ممکن است مجبور شود تا زمانی که دستورالعمل ها یا داده ها از RAM خوانده می شود قبل از ادامه پردازش صبر کند، که باعث کاهش عملکرد کلی سیستم کامپیوتری می شود.برای جلوگیری از این اتفاق، سیستمهای رایانهای معمولاً به حافظه پنهان مجهز میشوند: مقدار کمی حافظه با دسترسی تصادفی پویا (DRAM) که بسیار سریع است، اما بسیار گران است و بسیار نزدیک به خود CPU قرار دارد.این حافظه کش داده ها یا دستورالعمل هایی را ذخیره می کند که احتمالاً CPU در آینده نزدیک از آنها استفاده خواهد کرد. از آنجایی که این امر مانع از انتظار CPU می شود، به همین دلیل است که از کش برای افزایش عملکرد خواندن استفاده می شود.
حافظه کش و عملکرد
کش عملکرد کامپیوتر را افزایش می دهد. حافظه کش بسیار نزدیک به CPU قرار دارد، یا بر روی خود تراشه CPU یا روی مادربرد در مجاورت CPU و توسط یک گذرگاه داده اختصاصی متصل می شود. بنابراین دستورالعملها و دادهها را میتوان از روی آن خواند (و روی آن نوشت) بسیار سریعتر از حالت معمولی RAM. این بدان معناست که احتمال اینکه CPU منتظر بماند بسیار کمتر است – یا زمان انتظار به طور چشمگیری کاهش می یابد. نتیجه این است که مقدار بسیار کمی از حافظه کش می تواند منجر به افزایش قابل توجهی در عملکرد رایانه شود.
حافظه کش چگونه کار می کند؟
حافظه نهان با گرفتن داده ها یا دستورالعمل ها در آدرس های حافظه خاصی در RAM و کپی کردن آنها در حافظه نهان همراه با رکورد آدرس اصلی آن دستورالعمل ها یا داده ها کار می کند.این منجر به یک جدول می شود که حاوی تعداد کمی آدرس حافظه RAM و کپی هایی از دستورالعمل ها یا داده هایی است که آدرس حافظه RAM حاوی آن است.
حافظه پنهان “Hit”
هنگامی که پردازنده به دستورالعمل ها یا داده هایی از یک آدرس حافظه RAM معین نیاز دارد، قبل از بازیابی آنها از RAM، بررسی می کند که آیا حافظه نهان حاوی ارجاعی به آدرس حافظه RAM است یا خیر. اگر این کار را کرد، داده ها یا دستورالعمل های مربوطه را به جای RAM از حافظه کش می خواند. این به عنوان “یک ضربه کش” شناخته می شود. از آنجایی که حافظه نهان سریعتر از RAM است و از آنجایی که در نزدیکی CPU قرار دارد، می تواند دستورات و داده ها را با سرعت بیشتری دریافت کند و پردازش کند.زمانی که داده ها یا دستورالعمل ها باید به حافظه بازگردانده شوند، همین رویه انجام می شود. با این حال، در این مورد یک مرحله اضافی وجود دارد زیرا اگر چیزی در حافظه کش نوشته شود، در نهایت باید RAM نیز نوشته شود.
نحوه انجام این کار به خط مشی نوشتن کش بستگی دارد. سادهترین خطمشی بهعنوان «نوشتن از طریق» شناخته میشود: با این خط مشی هر چیزی که در حافظه پنهان نوشته میشود بلافاصله در RAM نیز نوشته میشود.یک سیاست جایگزین «بازنویسی» است. با استفاده از یک خط مشی “بازگشت”، داده های نوشته شده در حافظه نهان اکنون بلافاصله در RAM نیز نوشته می شود. هر چیزی که در حافظه پنهان نوشته می شود به عنوان “کثیف” علامت گذاری می شود، به این معنی که با داده ها یا دستورالعمل های اصلی که از RAM خوانده شده است متفاوت است. هنگامی که از حافظه کش حذف می شود، سپس و تنها پس از آن در RAM نوشته می شود و جایگزین اطلاعات اصلی می شود.خطمشیهای میانی اجازه میدهند که اطلاعات «کثیف» در صف قرار بگیرند و بهصورت دستهای به RAM بازگردانده شوند، که میتواند کارآمدتر از نوشتن چندگانه فردی باشد.
حافظه پنهان “Miss”
اگر دادهها یا دستورالعملهایی در یک آدرس حافظه RAM مشخص در حافظه نهان یافت نشد، به آن «مشکل کش» میگویند. در این حالت CPU مجبور می شود تا زمانی که اطلاعات از رم بازیابی می شود صبر کند.در واقع، داده ها یا دستورالعمل ها از RAM بازیابی شده و در حافظه کش نوشته می شوند و سپس به CPU ارسال می شوند. دلیل این امر این است که داده ها یا دستورالعمل هایی که اخیراً استفاده شده اند به احتمال زیاد در آینده نزدیک دوباره مورد نیاز خواهند بود. بنابراین هر چیزی که CPU از RAM درخواست می کند همیشه در حافظه کش کپی می شود.
(در این مورد یک استثنا وجود دارد. برخی از دادهها از نوعی هستند که به ندرت مورد استفاده مجدد قرار میگیرند، میتوان آنها را بهعنوان غیرقابل ذخیرهسازی علامتگذاری کرد. این امر از اشغال فضای ارزشمند حافظه پنهان توسط دادهها جلوگیری میکند.)این سوال پیش می آید که اگر حافظه کش از قبل پر باشد چه اتفاقی می افتد. پاسخ این است که برخی از محتویات حافظه نهان باید «اخراج» شوند تا فضا برای اطلاعات جدیدی که باید در آنجا نوشته شود باز شود.
اگر تصمیمی باید گرفته شود، حافظه نهان یک “سیاست جایگزینی” را اعمال می کند تا تصمیم بگیرد که کدام اطلاعات خارج شود.تعدادی سیاست جایگزینی احتمالی وجود دارد. یکی از متداول ترین آنها، سیاست حداقل استفاده اخیر (LRU) است. این خطمشی از این اصل استفاده میکند که اگر دادهها یا دستورالعملها اخیراً مورد استفاده قرار نگرفته باشند، احتمال کمتری وجود دارد که در آینده نزدیک نسبت به دادهها یا دستورالعملهایی که اخیراً مورد نیاز بودهاند، مورد نیاز باشند.
ارزش کلیدی حافظه کش
حافظه کش برای کاهش تنگناهای عملکرد بین RAM و CPU مورد نیاز است. استفاده از آن مشابه استفاده از RAM به عنوان کش دیسک است. در این حالت، دادههای پرکاربرد ذخیرهشده در سیستمهای ذخیرهسازی ثانویه (مانند هارد دیسکها یا SSD) بهطور موقت در RAM قرار میگیرند، جایی که CPU میتواند با سرعت بیشتری به آنها دسترسی پیدا کند.از آنجایی که RAM گرانتر (اما سریعتر) از حافظه ثانویه است، حافظه پنهان دیسک کوچکتر از هارد دیسک یا SSD است. از آنجایی که SRAM گرانتر (اما سریعتر) از DRAM است، کش های حافظه کوچکتر از RAM هستند.
انواع حافظه کش
حافظه پنهان اصلی بیشتر حافظه های نهان از نظر فیزیکی روی همان قالب قرار دارند که خود CPU قرار دارد، و قسمت نزدیک به هسته های CPU گاهی اوقات کش اولیه نامیده می شود، اگرچه این اصطلاح معمولاً دیگر استفاده نمی شود.حافظه نهان ثانویه این اغلب به بخش دیگری از حافظه نهان اشاره دارد که روی یک تراشه جداگانه روی مادربرد نزدیک به CPU قرار دارد. این اصطلاح نیز دیگر به طور معمول استفاده نمی شود، زیرا اکثر حافظه های کش در حال حاضر بر روی خود CPUقرار دارند.
سطوح حافظه کش
سیستم های کامپیوتری مدرن بیش از یک تکه حافظه کش دارند و این کش ها از نظر اندازه و نزدیکی به هسته های پردازنده و در نتیجه سرعت نیز متفاوت هستند. این سطوح به عنوان سطوح کش شناخته می شوند.کوچکترین و سریعترین حافظه کش به نام کش سطح ۱ یا کش L1 شناخته می شود و حافظه کش بعدی کش L2 است. اکثر سیستم ها اکنون دارای حافظه نهان L3 هستند و از زمان معرفی تراشه های Skylake، اینتل حافظه نهان L4 را نیز به برخی از پردازنده های خود اضافه کرده است.
سطح ۱
کش L1 حافظه کشی است که در خود CPU تعبیه شده است. با همان سرعت کلاک CPU کار می کند. این گرانترین نوع حافظه کش است بنابراین اندازه آن بسیار محدود است. اما از آنجایی که بسیار سریع است، اولین جایی است که یک پردازنده به دنبال داده ها یا دستورالعمل هایی است که ممکن است در آنجا از RAM بافر شده باشند.در واقع، در اکثر CPUهای مدرن، کش L1 به دو بخش تقسیم می شود: بخش داده (L1d) و بخش دستورالعمل (L1i). اینها به ترتیب داده ها و دستورالعمل ها را نگه می دارند.یک CPU مدرن ممکن است اندازه کش در حدود ۳۲ کیلوبایت L1i و L1d در هر هسته داشته باشد.
سطح ۲
حافظه نهان L2 نیز ممکن است در تراشه CPU قرار داشته باشد، اگرچه نه به اندازه حافظه نهان L1 به هسته. یا به ندرت ممکن است روی یک تراشه جداگانه نزدیک به CPU قرار گیرد. حافظه نهان L2 ارزانتر و بزرگتر از حافظه نهان L1 است، بنابراین اندازه کش L2 بزرگتر است و ممکن است حدود ۲۵۶ کیلوبایت در هر هسته باشد.
مرحله ۳
حافظه نهان سطح ۳ بسیار بزرگتر از حافظه نهان L1 یا L2 است، اما از جنبه مهم دیگری نیز متفاوت است. در حالی که کش های L1 و L2 برای هر هسته یک پردازنده خصوصی هستند، L3 معمولاً یک کش مشترک است که برای همه هسته ها مشترک است. این به آن اجازه می دهد تا نقش مهمی در به اشتراک گذاری داده ها و ارتباطات بین هسته ای ایفا کند. حافظه نهان L3 ممکن است در حد ۲ مگابایت در هر هسته باشد.
مطالب مرتبط: